#include "main.h"

//软件I2C测试程序   V1.0           修改日期：2025/6/9
//实现功能：I2C协议（无仲裁版）
//          使用MPU6050作为收发测试
//By:TAO XIN YU (陶鑫宇)



#define mpu6050_wirte_addr 0xD0		//MPU6050写地址
#define mpu6050_read_addr 0xD1		//MPU605读地址
#define mpu6050_who_am_i  0x75		//MPU6050 who am i 寄存器地址

//测试程序，如果从机有应答，点亮LED灯
void mpu6050_ping(void)
{
	//I2C起始信息
	MyI2C_Start();
	//发送从机地址
	MyI2C_SendOneData(mpu6050_wirte_addr);
	//接收应答，并判断
	if(!MyI2C_ReceiveACK())
	{
		LED1_ON();
	}
	//I2C停止信号
	MyI2C_Stop();
	
}

//接收函数测试程序
//获取MPU6050,正常值为0x68/0x69
void mpu6050_getID(void)
{
	//定义缓存变量
	unsigned char temp=0;
	//I2C起始信号
	MyI2C_Start();
	//发送从机地址+写
	MyI2C_SendOneData(mpu6050_wirte_addr);
	//接收从机应答
	MyI2C_ReceiveACK();
	//发送寄存器地址
	MyI2C_SendOneData(mpu6050_who_am_i);
	//接收从机应答
	MyI2C_ReceiveACK();
	//再次发送起始信息，准备接收数据
	MyI2C_Start();
	//发送从机地址+读
	MyI2C_SendOneData(mpu6050_read_addr);
	//接收应答
	MyI2C_ReceiveACK();
	//接收数据
	temp = MyI2C_ReceiveOneData();
	//直接停止通信
	MyI2C_Stop();
	//打印接收到的数据
	printf("%x\r\n",temp);
}

int main(void)
{
	//系统初始化 72Mhz
  systick_config();
	//初始化UART0
	MyUart0_init();
	Printf_flag=0;
	//初始化i2c
	MyI2C_0_init();
	//初始化LED
	LED_init();
	//默认不点灯
	LED1_OFF();
	//测试
	mpu6050_ping();
	
	
	
	
	while(1)
	{
		mpu6050_getID();
		delay_1ms(1);
	}
    
}
